<!DOCTYPE html>
<html lang="zh-CN" data-theme="light">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="generator" content="VuePress 2.0.0-beta.48" />
    <meta name="theme" content="VuePress Theme Hope" />
    <meta property="og:url" content="https://vuepress-theme-hope-v2-demo.mrhope.site/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html"><meta property="og:site_name" content="主题演示"><meta property="og:title" content="操作系统"><meta property="og:type" content="article"><meta property="og:locale" content="zh-CN"><meta property="og:locale:alternate" content="en-US"><meta property="article:tag" content="操作系统"><title>操作系统 | 主题演示</title><meta name="description" content="vuepress-theme-hope 的演示">
    <style>
      :root {
        --bg-color: #fff;
      }

      html[data-theme="dark"] {
        --bg-color: #1d2025;
      }

      html,
      body {
        background-color: var(--bg-color);
      }
    </style>
    <script>
      const userMode = localStorage.getItem("vuepress-theme-hope-scheme");
      const systemDarkMode =
        window.matchMedia &&
        window.matchMedia("(prefers-color-scheme: dark)").matches;

      if (userMode === "dark" || (userMode !== "light" && systemDarkMode)) {
        document.querySelector("html").setAttribute("data-theme", "dark");
      }
    </script>
    <link rel="stylesheet" href="/assets/style.dbbe025d.css">
    <link rel="modulepreload" href="/assets/app.e732cc94.js"><link rel="modulepreload" href="/assets/操作系统.html.c2f0370c.js"><link rel="modulepreload" href="/assets/plugin-vue_export-helper.21dcd24c.js"><link rel="modulepreload" href="/assets/操作系统.html.76b600e3.js"><link rel="prefetch" href="/assets/home.html.d675c4b6.js"><link rel="prefetch" href="/assets/intro.html.684ef626.js"><link rel="prefetch" href="/assets/index.html.e8ffec66.js"><link rel="prefetch" href="/assets/slide.html.050a6f1e.js"><link rel="prefetch" href="/assets/disable.html.b507ecac.js"><link rel="prefetch" href="/assets/encrypt.html.762116d5.js"><link rel="prefetch" href="/assets/markdown.html.5acf7a9a.js"><link rel="prefetch" href="/assets/page.html.141b0147.js"><link rel="prefetch" href="/assets/index.html.75bf4c69.js"><link rel="prefetch" href="/assets/article10.html.f5ea4d77.js"><link rel="prefetch" href="/assets/article11.html.6339c214.js"><link rel="prefetch" href="/assets/article12.html.5ac86a8f.js"><link rel="prefetch" href="/assets/article9.html.666c37a0.js"><link rel="prefetch" href="/assets/home.html.6e361c52.js"><link rel="prefetch" href="/assets/index.html.2d9b62a7.js"><link rel="prefetch" href="/assets/slide.html.6b655fa0.js"><link rel="prefetch" href="/assets/article1.html.f835efef.js"><link rel="prefetch" href="/assets/article2.html.e4775195.js"><link rel="prefetch" href="/assets/article3.html.bfdf934f.js"><link rel="prefetch" href="/assets/article4.html.69bccee4.js"><link rel="prefetch" href="/assets/article5.html.c7ac5439.js"><link rel="prefetch" href="/assets/article6.html.880c0652.js"><link rel="prefetch" href="/assets/article7.html.2cae84db.js"><link rel="prefetch" href="/assets/article8.html.6c46837c.js"><link rel="prefetch" href="/assets/disable.html.f629efab.js"><link rel="prefetch" href="/assets/encrypt.html.58d61689.js"><link rel="prefetch" href="/assets/markdown.html.779c42bf.js"><link rel="prefetch" href="/assets/page.html.125d74f5.js"><link rel="prefetch" href="/assets/index.html.3db704fb.js"><link rel="prefetch" href="/assets/article10.html.b5d65d2d.js"><link rel="prefetch" href="/assets/article11.html.b2cf93ee.js"><link rel="prefetch" href="/assets/article12.html.94e1cf22.js"><link rel="prefetch" href="/assets/article9.html.90cf2a62.js"><link rel="prefetch" href="/assets/Docker.html.de1063e8.js"><link rel="prefetch" href="/assets/Java基础.html.6c0b0f5c.js"><link rel="prefetch" href="/assets/Java容器.html.77448ff5.js"><link rel="prefetch" href="/assets/JUC.html.76307785.js"><link rel="prefetch" href="/assets/JVM.html.0bb340ff.js"><link rel="prefetch" href="/assets/Linux.html.90ea1c3b.js"><link rel="prefetch" href="/assets/MySQL.html.73ae62bf.js"><link rel="prefetch" href="/assets/NIO与Netty.html.a73529b1.js"><link rel="prefetch" href="/assets/index.html.2a38d188.js"><link rel="prefetch" href="/assets/Redis.html.78427b11.js"><link rel="prefetch" href="/assets/主流框架.html.f21f66df.js"><link rel="prefetch" href="/assets/分布式与高性能高可用.html.38ab4746.js"><link rel="prefetch" href="/assets/智力题.html.ec368cec.js"><link rel="prefetch" href="/assets/系统设计.html.fb8f2074.js"><link rel="prefetch" href="/assets/计算机网络.html.1a7f7d0e.js"><link rel="prefetch" href="/assets/设计模式.html.cd48ccf5.js"><link rel="prefetch" href="/assets/article1.html.ca54de60.js"><link rel="prefetch" href="/assets/article2.html.a99d479f.js"><link rel="prefetch" href="/assets/article3.html.5a2797ee.js"><link rel="prefetch" href="/assets/article4.html.3ac5a509.js"><link rel="prefetch" href="/assets/article5.html.c09d20ba.js"><link rel="prefetch" href="/assets/article6.html.c9e59f52.js"><link rel="prefetch" href="/assets/article7.html.948e77cc.js"><link rel="prefetch" href="/assets/article8.html.28c3977f.js"><link rel="prefetch" href="/assets/404.html.8a909211.js"><link rel="prefetch" href="/assets/index.html.690b188a.js"><link rel="prefetch" href="/assets/index.html.6085d793.js"><link rel="prefetch" href="/assets/index.html.932078ca.js"><link rel="prefetch" href="/assets/index.html.bb629f30.js"><link rel="prefetch" href="/assets/index.html.92b2d70c.js"><link rel="prefetch" href="/assets/index.html.82840baf.js"><link rel="prefetch" href="/assets/index.html.85406aa8.js"><link rel="prefetch" href="/assets/index.html.7b9124b8.js"><link rel="prefetch" href="/assets/index.html.e1e2a548.js"><link rel="prefetch" href="/assets/index.html.a9a69593.js"><link rel="prefetch" href="/assets/index.html.5b51b72b.js"><link rel="prefetch" href="/assets/index.html.ec7f0295.js"><link rel="prefetch" href="/assets/index.html.e14e2286.js"><link rel="prefetch" href="/assets/index.html.e89216be.js"><link rel="prefetch" href="/assets/index.html.c0adb933.js"><link rel="prefetch" href="/assets/index.html.a45798a3.js"><link rel="prefetch" href="/assets/index.html.e99c516b.js"><link rel="prefetch" href="/assets/index.html.f6be7fb4.js"><link rel="prefetch" href="/assets/index.html.6812b391.js"><link rel="prefetch" href="/assets/index.html.4bae905e.js"><link rel="prefetch" href="/assets/index.html.0599248b.js"><link rel="prefetch" href="/assets/index.html.963b2596.js"><link rel="prefetch" href="/assets/index.html.bbd9778f.js"><link rel="prefetch" href="/assets/index.html.c6a7a8d4.js"><link rel="prefetch" href="/assets/index.html.13391f8f.js"><link rel="prefetch" href="/assets/index.html.4b0a0f3f.js"><link rel="prefetch" href="/assets/index.html.bbd06d0d.js"><link rel="prefetch" href="/assets/index.html.9a4d8710.js"><link rel="prefetch" href="/assets/index.html.dfdff039.js"><link rel="prefetch" href="/assets/index.html.cd21ad11.js"><link rel="prefetch" href="/assets/index.html.72b3c545.js"><link rel="prefetch" href="/assets/index.html.0262e65d.js"><link rel="prefetch" href="/assets/index.html.8905ca40.js"><link rel="prefetch" href="/assets/index.html.98e54f53.js"><link rel="prefetch" href="/assets/index.html.707c5120.js"><link rel="prefetch" href="/assets/index.html.daf3ede2.js"><link rel="prefetch" href="/assets/index.html.ae769b93.js"><link rel="prefetch" href="/assets/index.html.59a75e1b.js"><link rel="prefetch" href="/assets/index.html.efb1d101.js"><link rel="prefetch" href="/assets/index.html.898df6f8.js"><link rel="prefetch" href="/assets/index.html.6339ac7f.js"><link rel="prefetch" href="/assets/index.html.0ffdd311.js"><link rel="prefetch" href="/assets/index.html.454f52cf.js"><link rel="prefetch" href="/assets/index.html.d8a5ddde.js"><link rel="prefetch" href="/assets/index.html.3be06723.js"><link rel="prefetch" href="/assets/index.html.1d180388.js"><link rel="prefetch" href="/assets/index.html.337241b0.js"><link rel="prefetch" href="/assets/index.html.0be3cd3f.js"><link rel="prefetch" href="/assets/index.html.8e5505d4.js"><link rel="prefetch" href="/assets/index.html.ffdd1452.js"><link rel="prefetch" href="/assets/index.html.d3825f4c.js"><link rel="prefetch" href="/assets/home.html.ccae7996.js"><link rel="prefetch" href="/assets/intro.html.fd34d8e1.js"><link rel="prefetch" href="/assets/index.html.ba786069.js"><link rel="prefetch" href="/assets/slide.html.0df38877.js"><link rel="prefetch" href="/assets/disable.html.6465acbf.js"><link rel="prefetch" href="/assets/encrypt.html.f697c2c7.js"><link rel="prefetch" href="/assets/markdown.html.f534aa4c.js"><link rel="prefetch" href="/assets/page.html.d91d46f6.js"><link rel="prefetch" href="/assets/index.html.b66745bd.js"><link rel="prefetch" href="/assets/article10.html.a245f19a.js"><link rel="prefetch" href="/assets/article11.html.c7128e02.js"><link rel="prefetch" href="/assets/article12.html.abd25c27.js"><link rel="prefetch" href="/assets/article9.html.7bba6b9f.js"><link rel="prefetch" href="/assets/home.html.eb29b64c.js"><link rel="prefetch" href="/assets/index.html.a51898c1.js"><link rel="prefetch" href="/assets/slide.html.4db0d16b.js"><link rel="prefetch" href="/assets/article1.html.8aeaf420.js"><link rel="prefetch" href="/assets/article2.html.1b3af75b.js"><link rel="prefetch" href="/assets/article3.html.83bc62c6.js"><link rel="prefetch" href="/assets/article4.html.9c3e20ef.js"><link rel="prefetch" href="/assets/article5.html.a86dfd69.js"><link rel="prefetch" href="/assets/article6.html.1005b310.js"><link rel="prefetch" href="/assets/article7.html.e62a511b.js"><link rel="prefetch" href="/assets/article8.html.5d7e1f67.js"><link rel="prefetch" href="/assets/disable.html.9d48f34e.js"><link rel="prefetch" href="/assets/encrypt.html.69059b41.js"><link rel="prefetch" href="/assets/markdown.html.f8f89db4.js"><link rel="prefetch" href="/assets/page.html.f139635c.js"><link rel="prefetch" href="/assets/index.html.126e92a0.js"><link rel="prefetch" href="/assets/article10.html.f00bfbec.js"><link rel="prefetch" href="/assets/article11.html.4e4aea0e.js"><link rel="prefetch" href="/assets/article12.html.ed056ef8.js"><link rel="prefetch" href="/assets/article9.html.c3cb96a4.js"><link rel="prefetch" href="/assets/Docker.html.f45c96a5.js"><link rel="prefetch" href="/assets/Java基础.html.56267f30.js"><link rel="prefetch" href="/assets/Java容器.html.5139503a.js"><link rel="prefetch" href="/assets/JUC.html.ebe8f287.js"><link rel="prefetch" href="/assets/JVM.html.c448b42c.js"><link rel="prefetch" href="/assets/Linux.html.43840acf.js"><link rel="prefetch" href="/assets/MySQL.html.eba28d84.js"><link rel="prefetch" href="/assets/NIO与Netty.html.66d42188.js"><link rel="prefetch" href="/assets/index.html.f3cc61a2.js"><link rel="prefetch" href="/assets/Redis.html.d810a669.js"><link rel="prefetch" href="/assets/主流框架.html.48ca457c.js"><link rel="prefetch" href="/assets/分布式与高性能高可用.html.a85c8cdb.js"><link rel="prefetch" href="/assets/智力题.html.4d751983.js"><link rel="prefetch" href="/assets/系统设计.html.c1542e9d.js"><link rel="prefetch" href="/assets/计算机网络.html.724e0903.js"><link rel="prefetch" href="/assets/设计模式.html.2465754d.js"><link rel="prefetch" href="/assets/article1.html.ac18bda1.js"><link rel="prefetch" href="/assets/article2.html.051f8867.js"><link rel="prefetch" href="/assets/article3.html.ebe7849b.js"><link rel="prefetch" href="/assets/article4.html.a4dbc976.js"><link rel="prefetch" href="/assets/article5.html.395a5403.js"><link rel="prefetch" href="/assets/article6.html.74c49cbf.js"><link rel="prefetch" href="/assets/article7.html.bf053e97.js"><link rel="prefetch" href="/assets/article8.html.7213c414.js"><link rel="prefetch" href="/assets/404.html.22aaa4fc.js"><link rel="prefetch" href="/assets/index.html.bd6ff77c.js"><link rel="prefetch" href="/assets/index.html.a7880d9d.js"><link rel="prefetch" href="/assets/index.html.f5f99f6a.js"><link rel="prefetch" href="/assets/index.html.561cd4cd.js"><link rel="prefetch" href="/assets/index.html.2b2206fe.js"><link rel="prefetch" href="/assets/index.html.ec6b7467.js"><link rel="prefetch" href="/assets/index.html.146ab8c4.js"><link rel="prefetch" href="/assets/index.html.f201f6e8.js"><link rel="prefetch" href="/assets/index.html.a1a6c5d4.js"><link rel="prefetch" href="/assets/index.html.61b33c23.js"><link rel="prefetch" href="/assets/index.html.8640e57f.js"><link rel="prefetch" href="/assets/index.html.c3d0fc1d.js"><link rel="prefetch" href="/assets/index.html.461f8cdf.js"><link rel="prefetch" href="/assets/index.html.1dea7bef.js"><link rel="prefetch" href="/assets/index.html.e6addda8.js"><link rel="prefetch" href="/assets/index.html.2638e7e9.js"><link rel="prefetch" href="/assets/index.html.5db2b8e8.js"><link rel="prefetch" href="/assets/index.html.cbff7fea.js"><link rel="prefetch" href="/assets/index.html.5ac21d40.js"><link rel="prefetch" href="/assets/index.html.c7acfbee.js"><link rel="prefetch" href="/assets/index.html.fb44feb1.js"><link rel="prefetch" href="/assets/index.html.d4e476c9.js"><link rel="prefetch" href="/assets/index.html.ec5764c9.js"><link rel="prefetch" href="/assets/index.html.d185c9f1.js"><link rel="prefetch" href="/assets/index.html.0867f7ab.js"><link rel="prefetch" href="/assets/index.html.2c3899c7.js"><link rel="prefetch" href="/assets/index.html.8a2aee35.js"><link rel="prefetch" href="/assets/index.html.130e4c85.js"><link rel="prefetch" href="/assets/index.html.7277b095.js"><link rel="prefetch" href="/assets/index.html.c074ddbd.js"><link rel="prefetch" href="/assets/index.html.e91a40c5.js"><link rel="prefetch" href="/assets/index.html.0b2b027d.js"><link rel="prefetch" href="/assets/index.html.6b602146.js"><link rel="prefetch" href="/assets/index.html.16d4af72.js"><link rel="prefetch" href="/assets/index.html.b8fc0dcc.js"><link rel="prefetch" href="/assets/index.html.9b3fcbd9.js"><link rel="prefetch" href="/assets/index.html.eeb89bf7.js"><link rel="prefetch" href="/assets/index.html.5114cd1e.js"><link rel="prefetch" href="/assets/index.html.b8354286.js"><link rel="prefetch" href="/assets/index.html.fcd579df.js"><link rel="prefetch" href="/assets/index.html.e743d320.js"><link rel="prefetch" href="/assets/index.html.b34f28e1.js"><link rel="prefetch" href="/assets/index.html.dd5dd927.js"><link rel="prefetch" href="/assets/index.html.7df41339.js"><link rel="prefetch" href="/assets/index.html.9de9b7ae.js"><link rel="prefetch" href="/assets/index.html.db158b25.js"><link rel="prefetch" href="/assets/index.html.fcab0b26.js"><link rel="prefetch" href="/assets/index.html.afada1db.js"><link rel="prefetch" href="/assets/index.html.8681058b.js"><link rel="prefetch" href="/assets/index.html.1c990d16.js"><link rel="prefetch" href="/assets/index.html.9563932e.js"><link rel="prefetch" href="/assets/404.4ba82410.js"><link rel="prefetch" href="/assets/Layout.67323a43.js"><link rel="prefetch" href="/assets/Slide.be972901.js"><link rel="prefetch" href="/assets/Blog.caaad5e4.js"><link rel="prefetch" href="/assets/giscus.es.63137db5.js"><link rel="prefetch" href="/assets/auto.esm.36809f22.js"><link rel="prefetch" href="/assets/index.daae04bf.js"><link rel="prefetch" href="/assets/index.1842ee54.js"><link rel="prefetch" href="/assets/mermaid.esm.min.ee1e0284.js"><link rel="prefetch" href="/assets/highlight.esm.d982e650.js"><link rel="prefetch" href="/assets/markdown.esm.832a189d.js"><link rel="prefetch" href="/assets/math.esm.a3f84b6f.js"><link rel="prefetch" href="/assets/notes.esm.3c361cb7.js"><link rel="prefetch" href="/assets/reveal.esm.b96f05d8.js"><link rel="prefetch" href="/assets/search.esm.80da4a02.js"><link rel="prefetch" href="/assets/zoom.esm.8514a202.js"><link rel="prefetch" href="/assets/photoswipe.esm.092fbc15.js">
  </head>
  <body>
    <div id="app"><!--[--><!--[--><!--[--><span tabindex="-1"></span><a href="#main-content" class="skip-link sr-only">Skip to content</a><!--]--><div class="theme-container has-toc"><!--[--><!--[--><header class="navbar"><div class="navbar-left"><button class="toggle-sidebar-button" title="Toggle Sidebar"><span class="icon"></span></button><!----><a href="/zh/" class="brand"><img class="logo" src="/logo.svg" alt="主题演示"><!----><span class="site-name hide-in-pad">主题演示</span></a><!----></div><div class="navbar-center"><!----><nav class="nav-links"><div class="nav-item hide-in-mobile"><a href="/zh/" class="nav-link" aria-label="博客主页"><span class="icon iconfont icon-home" style=""></span>博客主页<!----></a></div><div class="nav-item hide-in-mobile"><a href="/zh/home.html" class="nav-link" aria-label="项目主页"><span class="icon iconfont icon-home" style=""></span>项目主页<!----></a></div><div class="nav-item hide-in-mobile"><a href="/zh/guide/" class="nav-link" aria-label="使用指南"><span class="icon iconfont icon-creative" style=""></span>使用指南<!----></a></div><div class="nav-item hide-in-mobile"><div class="dropdown-wrapper"><button class="dropdown-title" type="button" aria-label="博文"><span class="title"><span class="icon iconfont icon-edit" style=""></span>博文</span><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><h4 class="dropdown-subtitle"><span>文章 1-4</span></h4><ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/zh/posts/article/article1.html" class="nav-link" aria-label="文章 1"><span class="icon iconfont icon-edit" style=""></span>文章 1<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article2.html" class="nav-link" aria-label="文章 2"><span class="icon iconfont icon-edit" style=""></span>文章 2<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article3.html" class="nav-link" aria-label="文章 3"><span class="icon iconfont icon-edit" style=""></span>文章 3<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article4.html" class="nav-link" aria-label="文章 4"><span class="icon iconfont icon-edit" style=""></span>文章 4<!----></a></li></ul></li><li class="dropdown-item"><h4 class="dropdown-subtitle"><span>文章 5-12</span></h4><ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/zh/posts/article/article5.html" class="nav-link" aria-label="文章 5"><span class="icon iconfont icon-edit" style=""></span>文章 5<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article6.html" class="nav-link" aria-label="文章 6"><span class="icon iconfont icon-edit" style=""></span>文章 6<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article7.html" class="nav-link" aria-label="文章 7"><span class="icon iconfont icon-edit" style=""></span>文章 7<!----></a></li><li class="dropdown-subitem"><a href="/zh/posts/article/article8.html" class="nav-link" aria-label="文章 8"><span class="icon iconfont icon-edit" style=""></span>文章 8<!----></a></li></ul></li><li class="dropdown-item"><a href="/zh/posts/article9.html" class="nav-link" aria-label="文章 9"><span class="icon iconfont icon-edit" style=""></span>文章 9<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article10.html" class="nav-link" aria-label="文章 10"><span class="icon iconfont icon-edit" style=""></span>文章 10<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article11.html" class="nav-link" aria-label="文章 11"><span class="icon iconfont icon-edit" style=""></span>文章 11<!----></a></li><li class="dropdown-item"><a href="/zh/posts/article12.html" class="nav-link" aria-label="文章 12"><span class="icon iconfont icon-edit" style=""></span>文章 12<!----></a></li></ul></button></div></div><div class="nav-item hide-in-mobile"><a href="https://vuepress-theme-hope.github.io/v2/zh/" rel="noopener noreferrer" target="_blank" aria-label="主题文档" class="nav-link"><span class="icon iconfont icon-note" style=""></span>主题文档<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div></nav><!----></div><div class="navbar-right"><!----><div class="nav-item"><div class="dropdown-wrapper i18n-dropdown"><button class="dropdown-title" type="button" aria-label="选择语言"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon i18n-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="i18n icon" style="width:1rem;height:1rem;vertical-align:middle;"><path d="M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z"></path></svg><!--]--><span class="arrow"></span><ul class="nav-dropdown"><li class="dropdown-item"><a href="/" class="nav-link" aria-label="English"><!---->English<!----></a></li><li class="dropdown-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html" class="router-link-active router-link-exact-active nav-link active" aria-label="简体中文"><!---->简体中文<!----></a></li></ul></button></div></div><div class="nav-item"><a class="repo-link" href="https://gitee.com/changluJava/personal-reading" target="_blank" rel="noopener noreferrer" aria-label="Gitee"><svg xmlns="http://www.w3.org/2000/svg" class="icon gitee-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="gitee icon" style="width:1.25rem;height:1.25rem;vertical-align:middle;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"></path></svg></a></div><div class="nav-item hide-in-mobile"><button id="appearance-switch"><svg xmlns="http://www.w3.org/2000/svg" class="icon auto-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="auto icon" style="display:block;"><path d="M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm0-840c-198.78 0-360 161.22-360 360 0 198.84 161.22 360 360 360s360-161.16 360-360c0-198.78-161.22-360-360-360zm0 660V212c165.72 0 300 134.34 300 300 0 165.72-134.28 300-300 300z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon dark-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="dark icon" style="display:none;"><path d="M524.8 938.667h-4.267a439.893 439.893 0 0 1-313.173-134.4 446.293 446.293 0 0 1-11.093-597.334A432.213 432.213 0 0 1 366.933 90.027a42.667 42.667 0 0 1 45.227 9.386 42.667 42.667 0 0 1 10.24 42.667 358.4 358.4 0 0 0 82.773 375.893 361.387 361.387 0 0 0 376.747 82.774 42.667 42.667 0 0 1 54.187 55.04 433.493 433.493 0 0 1-99.84 154.88 438.613 438.613 0 0 1-311.467 128z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" class="icon light-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="light icon" style="display:none;"><path d="M952 552h-80a40 40 0 0 1 0-80h80a40 40 0 0 1 0 80zM801.88 280.08a41 41 0 0 1-57.96-57.96l57.96-58a41.04 41.04 0 0 1 58 58l-58 57.96zM512 752a240 240 0 1 1 0-480 240 240 0 0 1 0 480zm0-560a40 40 0 0 1-40-40V72a40 40 0 0 1 80 0v80a40 40 0 0 1-40 40zm-289.88 88.08-58-57.96a41.04 41.04 0 0 1 58-58l57.96 58a41 41 0 0 1-57.96 57.96zM192 512a40 40 0 0 1-40 40H72a40 40 0 0 1 0-80h80a40 40 0 0 1 40 40zm30.12 231.92a41 41 0 0 1 57.96 57.96l-57.96 58a41.04 41.04 0 0 1-58-58l58-57.96zM512 832a40 40 0 0 1 40 40v80a40 40 0 0 1-80 0v-80a40 40 0 0 1 40-40zm289.88-88.08 58 57.96a41.04 41.04 0 0 1-58 58l-57.96-58a41 41 0 0 1 57.96-57.96z"></path></svg></button></div><!----><!----><button class="toggle-navbar-button" aria-label="Toggle Navbar" aria-expanded="false" aria-controls="nav-screen"><span class="button-container"><span class="button-top"></span><span class="button-middle"></span><span class="button-bottom"></span></span></button></div></header><!----><!--]--><!----><div class="toggle-sidebar-wrapper"><span class="arrow left"></span></div><aside class="sidebar"><!--[--><!----><!--]--><ul class="sidebar-links"><li><!--[--><a href="/zh/" class="nav-link sidebar-link sidebar-page" aria-label="博客主页"><span class="icon iconfont icon-home" style=""></span>博客主页<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/home.html" class="nav-link sidebar-link sidebar-page" aria-label="项目主页"><span class="icon iconfont icon-home" style=""></span>项目主页<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/slide" class="nav-link sidebar-link sidebar-page" aria-label="幻灯片"><!---->幻灯片<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable active"><span class="icon iconfont icon-creative" style=""></span><a href="/zh/interview/" class="title">面试指南</a><span class="arrow down"></span></button><ul class="sidebar-links"><li><!--[--><a href="/zh/interview/Docker.html" class="nav-link sidebar-link sidebar-page" aria-label="Docker"><span class="icon iconfont icon-lock" style=""></span>Docker<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Java%E5%9F%BA%E7%A1%80.html" class="nav-link sidebar-link sidebar-page" aria-label="JAVA"><span class="icon iconfont icon-lock" style=""></span>JAVA<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Java%E5%AE%B9%E5%99%A8.html" class="nav-link sidebar-link sidebar-page" aria-label="Java容器"><span class="icon iconfont icon-lock" style=""></span>Java容器<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/JUC.html" class="nav-link sidebar-link sidebar-page" aria-label="JUC"><span class="icon iconfont icon-lock" style=""></span>JUC<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/JVM.html" class="nav-link sidebar-link sidebar-page" aria-label="JVM"><span class="icon iconfont icon-lock" style=""></span>JVM<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Linux.html" class="nav-link sidebar-link sidebar-page" aria-label="Linux"><span class="icon iconfont icon-lock" style=""></span>Linux<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/MySQL.html" class="nav-link sidebar-link sidebar-page" aria-label="MySQL"><span class="icon iconfont icon-lock" style=""></span>MySQL<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/NIO%E4%B8%8ENetty.html" class="nav-link sidebar-link sidebar-page" aria-label="Netty"><span class="icon iconfont icon-lock" style=""></span>Netty<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/Redis.html" class="nav-link sidebar-link sidebar-page" aria-label="Redis"><span class="icon iconfont icon-lock" style=""></span>Redis<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6.html" class="nav-link sidebar-link sidebar-page" aria-label="主流框架"><span class="icon iconfont icon-lock" style=""></span>主流框架<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%8E%E9%AB%98%E6%80%A7%E8%83%BD%E9%AB%98%E5%8F%AF%E7%94%A8.html" class="nav-link sidebar-link sidebar-page" aria-label="分布式"><span class="icon iconfont icon-lock" style=""></span>分布式<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html" class="router-link-active router-link-exact-active nav-link active sidebar-link sidebar-page active" aria-label="操作系统"><span class="icon iconfont icon-lock" style=""></span>操作系统<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#基础" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="基础"><!---->基础<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、什么是操作系统" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、什么是操作系统？"><!---->1、什么是操作系统？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、系统调用" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、系统调用"><!---->2、系统调用<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#进程管理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="进程管理"><!---->进程管理<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、线程、进程与协程" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、线程、进程与协程"><!---->1、线程、进程与协程<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、进程有哪几个状态" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、进程有哪几个状态"><!---->2、进程有哪几个状态<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、进程间的通信方式" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、进程间的通信方式"><!---->3、进程间的通信方式<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、线程间的同步方式" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4、线程间的同步方式"><!---->4、线程间的同步方式<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_5、进程调度算法" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="5、进程调度算法"><!---->5、进程调度算法<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_6、死锁、死锁条件以及解决死锁处理方法" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="6、死锁、死锁条件以及解决死锁处理方法"><!---->6、死锁、死锁条件以及解决死锁处理方法<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_7、避免死锁" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="7、避免死锁"><!---->7、避免死锁<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_8、cpu在执行一个线程-什么时候会被切换走" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="8、CPU在执行一个线程，什么时候会被切换走？"><!---->8、CPU在执行一个线程，什么时候会被切换走？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_9、一个32位系统-一个进程访问地址空间是多大" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="9、一个32位系统，一个进程访问地址空间是多大？"><!---->9、一个32位系统，一个进程访问地址空间是多大？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_10、操作系统fork进程的具体流程" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="10、操作系统fork进程的具体流程"><!---->10、操作系统fork进程的具体流程<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_11、进程有哪些数据段-线程可以使用哪些进程的数据段" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="11、进程有哪些数据段？线程可以使用哪些进程的数据段？"><!---->11、进程有哪些数据段？线程可以使用哪些进程的数据段？<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#文件管理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="文件管理"><!---->文件管理<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、父进程的文件描述符和子进程共享吗" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、父进程的文件描述符和子进程共享吗"><!---->1、父进程的文件描述符和子进程共享吗<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、文件描述符具体是什么东西-从task-struct和linux的文件索引两方面讲的" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、文件描述符具体是什么东西：从task_struct和linux的文件索引两方面讲的"><!---->2、文件描述符具体是什么东西：从task_struct和linux的文件索引两方面讲的<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、linux打开文件和windows打开文件有什么不同" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、Linux打开文件和windows打开文件有什么不同"><!---->3、Linux打开文件和windows打开文件有什么不同<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#io管理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="IO管理"><!---->IO管理<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、网络请求的处理过程" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、网络请求的处理过程"><!---->1、网络请求的处理过程<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、io模型" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、IO模型"><!---->2、IO模型<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、io复用技术" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、IO复用技术"><!---->3、IO复用技术<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#内存管理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="内存管理"><!---->内存管理<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、内存管理介绍" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、内存管理介绍"><!---->1、内存管理介绍<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、常见的内存管理机制" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、常见的内存管理机制"><!---->2、常见的内存管理机制<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、快表和多级页表" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、快表和多级页表"><!---->3、快表和多级页表<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、分页机制与分段机制的共同点" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4、分页机制与分段机制的共同点"><!---->4、分页机制与分段机制的共同点<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、操作系统用户态与内核态的切换" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、操作系统用户态与内核态的切换"><!---->1、操作系统用户态与内核态的切换<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、虚存是什么-请页与交换-虚拟内存-系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存-一个连续完整的地址空间-而实际上-它通常是被分隔成多个物理内存碎片-还有部分暂时存储在外部磁盘存储器上-在需要时进行数据交换。" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="2、虚存是什么？请页与交换？虚拟内存：系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存（一个连续完整的地址空间），而实际上，它通常是被分隔成多个物理内存碎片，还有部分暂时存储在外部磁盘存储器上，在需要时进行数据交换。"><!---->2、虚存是什么？请页与交换？虚拟内存：系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存（一个连续完整的地址空间），而实际上，它通常是被分隔成多个物理内存碎片，还有部分暂时存储在外部磁盘存储器上，在需要时进行数据交换。<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、页面置换算法-请页过程中无空间情况" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="3、页面置换算法（请页过程中无空间情况）"><!---->3、页面置换算法（请页过程中无空间情况）<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、缺页中断异常" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="4、缺页中断异常"><!---->4、缺页中断异常<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_5、如何提升虚拟和物理地址映射速度" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="5、如何提升虚拟和物理地址映射速度？"><!---->5、如何提升虚拟和物理地址映射速度？<!----></a><ul class="sidebar-sub-headers"></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_6、分页与分段的比较" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="6、分页与分段的比较"><!---->6、分页与分段的比较<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#设备管理" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="设备管理"><!---->设备管理<!----></a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、中断内会发生什么-中断知道吗" class="router-link-active router-link-exact-active nav-link sidebar-link heading" aria-label="1、中断内会发生什么，中断知道吗？"><!---->1、中断内会发生什么，中断知道吗？<!----></a><ul class="sidebar-sub-headers"></ul></li></ul></li></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E6%99%BA%E5%8A%9B%E9%A2%98.html" class="nav-link sidebar-link sidebar-page" aria-label="智力题"><span class="icon iconfont icon-lock" style=""></span>智力题<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1.html" class="nav-link sidebar-link sidebar-page" aria-label="系统设计"><span class="icon iconfont icon-lock" style=""></span>系统设计<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.html" class="nav-link sidebar-link sidebar-page" aria-label="计算机网络"><span class="icon iconfont icon-lock" style=""></span>计算机网络<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/interview/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html" class="nav-link sidebar-link sidebar-page" aria-label="设计模式"><!---->设计模式<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading clickable"><span class="icon iconfont icon-creative" style=""></span><a href="/zh/guide/" class="title">如何使用</a><!----></p><ul class="sidebar-links"><li><!--[--><a href="/zh/guide/page.html" class="nav-link sidebar-link sidebar-page" aria-label="页面配置"><span class="icon iconfont icon-page" style=""></span>页面配置<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/markdown.html" class="nav-link sidebar-link sidebar-page" aria-label="Markdown 展示"><span class="icon iconfont icon-markdown" style=""></span>Markdown 展示<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/disable.html" class="nav-link sidebar-link sidebar-page" aria-label="布局与功能禁用"><span class="icon iconfont icon-config" style=""></span>布局与功能禁用<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/guide/encrypt.html" class="nav-link sidebar-link sidebar-page" aria-label="密码加密的文章"><span class="icon iconfont icon-lock" style=""></span>密码加密的文章<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章</span><!----></p><ul class="sidebar-links"><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 1-4</span><span class="arrow right"></span></button><!----></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 5-12</span><!----></p><ul class="sidebar-links"><li><!--[--><section class="sidebar-group"><button class="sidebar-heading clickable"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 5-8</span><span class="arrow right"></span></button><!----></section><!--]--></li><li><!--[--><section class="sidebar-group"><p class="sidebar-heading"><span class="icon iconfont icon-note" style=""></span><span class="title">文章 9-12</span><!----></p><ul class="sidebar-links"><li><!--[--><a href="/zh/posts/article9.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 9"><span class="icon iconfont icon-edit" style=""></span>文章 9<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article10.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 10"><span class="icon iconfont icon-edit" style=""></span>文章 10<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article11.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 11"><span class="icon iconfont icon-edit" style=""></span>文章 11<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li><li><!--[--><a href="/zh/posts/article12.html" class="nav-link sidebar-link sidebar-page" aria-label="文章 12"><span class="icon iconfont icon-edit" style=""></span>文章 12<!----></a><ul class="sidebar-sub-headers"></ul><!--]--></li></ul></section><!--]--></li></ul></section><!--]--></li></ul></section><!--]--></li></ul><!--[--><!----><!--]--></aside><!--[--><main class="page" id="main-content"><!--[--><!----><nav class="breadcrumb disable"></nav><div class="page-title"><h1><span class="icon iconfont icon-lock" style=""></span>操作系统</h1><div class="page-info"><span class="author-info" aria-label="作者🖊" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon author-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="author icon"><path d="M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"></path></svg><span><a class="author-item" href="https://changlu.blog.csdn.net" target="_blank" rel="noopener noreferrer">长路</a></span><span property="author" content="长路"></span></span><!----><!----><span class="category-info" aria-label="分类🌈" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon category-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="category icon"><path d="M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"></path></svg><ul class="categories-wrapper"><li class="category category8 clickable" role="navigation">面试题</li><meta property="articleSection" content="面试题"></ul></span><span aria-label="标签🏷" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon tag-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="tag icon"><path d="M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"></path></svg><ul class="tags-wrapper"><li class="tag tag2 clickable" role="navigation">操作系统</li></ul><meta property="keywords" content="操作系统"></span><span class="reading-time-info" aria-label="阅读时间⌛" data-balloon-pos="down" isoriginal="false" pageview="false"><svg xmlns="http://www.w3.org/2000/svg" class="icon timer-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="timer icon"><path d="M799.387 122.15c4.402-2.978 7.38-7.897 7.38-13.463v-1.165c0-8.933-7.38-16.312-16.312-16.312H256.33c-8.933 0-16.311 7.38-16.311 16.312v1.165c0 5.825 2.977 10.874 7.637 13.592 4.143 194.44 97.22 354.963 220.201 392.763-122.204 37.542-214.893 196.511-220.2 389.397-4.661 5.049-7.638 11.651-7.638 19.03v5.825h566.49v-5.825c0-7.379-2.849-13.981-7.509-18.9-5.049-193.016-97.867-351.985-220.2-389.527 123.24-37.67 216.446-198.453 220.588-392.892zM531.16 450.445v352.632c117.674 1.553 211.787 40.778 211.787 88.676H304.097c0-48.286 95.149-87.382 213.728-88.676V450.445c-93.077-3.107-167.901-81.297-167.901-177.093 0-8.803 6.99-15.793 15.793-15.793 8.803 0 15.794 6.99 15.794 15.793 0 80.261 63.69 145.635 142.01 145.635s142.011-65.374 142.011-145.635c0-8.803 6.99-15.793 15.794-15.793s15.793 6.99 15.793 15.793c0 95.019-73.789 172.82-165.96 177.093z"></path></svg><span>大约 32 分钟</span><meta property="timeRequired" content="PT32M"></span></div><hr></div><div class="toc-place-holder"><aside id="toc"><div class="toc-header">此页内容</div><div class="toc-wrapper"><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#基础" class="router-link-active router-link-exact-active toc-link level2">基础</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、什么是操作系统" class="router-link-active router-link-exact-active toc-link level3">1、什么是操作系统？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、系统调用" class="router-link-active router-link-exact-active toc-link level3">2、系统调用</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#进程管理" class="router-link-active router-link-exact-active toc-link level2">进程管理</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、线程、进程与协程" class="router-link-active router-link-exact-active toc-link level3">1、线程、进程与协程</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、进程有哪几个状态" class="router-link-active router-link-exact-active toc-link level3">2、进程有哪几个状态</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、进程间的通信方式" class="router-link-active router-link-exact-active toc-link level3">3、进程间的通信方式</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、线程间的同步方式" class="router-link-active router-link-exact-active toc-link level3">4、线程间的同步方式</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_5、进程调度算法" class="router-link-active router-link-exact-active toc-link level3">5、进程调度算法</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_6、死锁、死锁条件以及解决死锁处理方法" class="router-link-active router-link-exact-active toc-link level3">6、死锁、死锁条件以及解决死锁处理方法</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_7、避免死锁" class="router-link-active router-link-exact-active toc-link level3">7、避免死锁</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_8、cpu在执行一个线程-什么时候会被切换走" class="router-link-active router-link-exact-active toc-link level3">8、CPU在执行一个线程，什么时候会被切换走？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_9、一个32位系统-一个进程访问地址空间是多大" class="router-link-active router-link-exact-active toc-link level3">9、一个32位系统，一个进程访问地址空间是多大？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_10、操作系统fork进程的具体流程" class="router-link-active router-link-exact-active toc-link level3">10、操作系统fork进程的具体流程</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_11、进程有哪些数据段-线程可以使用哪些进程的数据段" class="router-link-active router-link-exact-active toc-link level3">11、进程有哪些数据段？线程可以使用哪些进程的数据段？</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#文件管理" class="router-link-active router-link-exact-active toc-link level2">文件管理</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、父进程的文件描述符和子进程共享吗" class="router-link-active router-link-exact-active toc-link level3">1、父进程的文件描述符和子进程共享吗</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、文件描述符具体是什么东西-从task-struct和linux的文件索引两方面讲的" class="router-link-active router-link-exact-active toc-link level3">2、文件描述符具体是什么东西：从task_struct和linux的文件索引两方面讲的</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、linux打开文件和windows打开文件有什么不同" class="router-link-active router-link-exact-active toc-link level3">3、Linux打开文件和windows打开文件有什么不同</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#io管理" class="router-link-active router-link-exact-active toc-link level2">IO管理</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、网络请求的处理过程" class="router-link-active router-link-exact-active toc-link level3">1、网络请求的处理过程</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、io模型" class="router-link-active router-link-exact-active toc-link level3">2、IO模型</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、io复用技术" class="router-link-active router-link-exact-active toc-link level3">3、IO复用技术</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#内存管理" class="router-link-active router-link-exact-active toc-link level2">内存管理</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、内存管理介绍" class="router-link-active router-link-exact-active toc-link level3">1、内存管理介绍</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、常见的内存管理机制" class="router-link-active router-link-exact-active toc-link level3">2、常见的内存管理机制</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、快表和多级页表" class="router-link-active router-link-exact-active toc-link level3">3、快表和多级页表</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、分页机制与分段机制的共同点" class="router-link-active router-link-exact-active toc-link level3">4、分页机制与分段机制的共同点</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、操作系统用户态与内核态的切换" class="router-link-active router-link-exact-active toc-link level3">1、操作系统用户态与内核态的切换</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_2、虚存是什么-请页与交换-虚拟内存-系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存-一个连续完整的地址空间-而实际上-它通常是被分隔成多个物理内存碎片-还有部分暂时存储在外部磁盘存储器上-在需要时进行数据交换。" class="router-link-active router-link-exact-active toc-link level3">2、虚存是什么？请页与交换？虚拟内存：系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存（一个连续完整的地址空间），而实际上，它通常是被分隔成多个物理内存碎片，还有部分暂时存储在外部磁盘存储器上，在需要时进行数据交换。</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_3、页面置换算法-请页过程中无空间情况" class="router-link-active router-link-exact-active toc-link level3">3、页面置换算法（请页过程中无空间情况）</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_4、缺页中断异常" class="router-link-active router-link-exact-active toc-link level3">4、缺页中断异常</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_5、如何提升虚拟和物理地址映射速度" class="router-link-active router-link-exact-active toc-link level3">5、如何提升虚拟和物理地址映射速度？</a></li><!----><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_6、分页与分段的比较" class="router-link-active router-link-exact-active toc-link level3">6、分页与分段的比较</a></li><!----><!--]--></ul><!--]--><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#设备管理" class="router-link-active router-link-exact-active toc-link level2">设备管理</a></li><ul class="toc-list"><!--[--><li class="toc-item"><a aria-current="page" href="/zh/interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html#_1、中断内会发生什么-中断知道吗" class="router-link-active router-link-exact-active toc-link level3">1、中断内会发生什么，中断知道吗？</a></li><!----><!--]--></ul><!--]--></ul></div></aside></div><!----><div class="theme-hope-content"><h1 id="操作系统" tabindex="-1"><a class="header-anchor" href="#操作系统" aria-hidden="true">#</a> 操作系统</h1><h2 id="基础" tabindex="-1"><a class="header-anchor" href="#基础" aria-hidden="true">#</a> 基础</h2><h3 id="_1、什么是操作系统" tabindex="-1"><a class="header-anchor" href="#_1、什么是操作系统" aria-hidden="true">#</a> 1、什么是操作系统？</h3><blockquote><p>管理软硬件资源的程序，核心是内核，负责系统的进程、文件、内存、应用、设备、IO的管理</p></blockquote><p>①简称OS，<strong>管理计算机资源和软件资源</strong>的程序。</p><p>②本质是一个软件程序，用于管理计算机硬件资源和软件资源。</p><p>③屏蔽了硬件层的复杂性。</p><p>④操作系统的核心部分是内核，负责系统的硬件管理、文件管理、内存管理以及应用程序的管理。</p><h3 id="_2、系统调用" tabindex="-1"><a class="header-anchor" href="#_2、系统调用" aria-hidden="true">#</a> 2、系统调用</h3><blockquote><p>上下级运行分为于用户态和内核态。对于计算机的系统资源只有通过切换到内核态才能够去执行；而用户态只能够读取程序中的数据。</p></blockquote><p>系统上运行级别分为：用户态与内核态。</p><ul><li>用户态能够直接读取程序中的数据。</li><li>内核态也就是系统级的程序， 只有通过系统级的程序才能够去访问计算的任何资源，不受限制。</li></ul><p>什么是系统调用？</p><ul><li>场景：若是我们需要调用操作系统提供的系统态级别的子功能，那就需要使用系统调用了。</li><li>子功能：文件管理、进程控制、内存管理等，都必须通过系统调用方式向操作系统提出服务请求，并由操作系统代为完成。</li></ul><p>系统功能包含：设备管理、文件管理、进程管理、进程通信、内存管理。</p><h2 id="进程管理" tabindex="-1"><a class="header-anchor" href="#进程管理" aria-hidden="true">#</a> 进程管理</h2><h3 id="_1、线程、进程与协程" tabindex="-1"><a class="header-anchor" href="#_1、线程、进程与协程" aria-hidden="true">#</a> 1、线程、进程与协程</h3><blockquote><p>线程是进程的一个执行单元；一个线程可以有多个协程，一个进程也可以说有多个协程。协程是用户态的轻量级线程，没有内核切换的开销。</p></blockquote><p>线程指的是进程内一个执行单元；一个线程可以有多个协程，一个进程也可以单独拥有多个协程。</p><p>线程与进程都是同步机制，协程是异步机制。</p><p>进程与线程区别：</p><p>(1) 拥有资源：进程是资源分配的基本单位，线程不拥有资源，但其可以访问隶属进程的资源。</p><p>(2) 调度：线程是独立调度的基本单位，是进程的一个执行流，是CPU调度与分派的基本单位，是比进程更小的能够独立运行的基本单位。</p><p>(3) 系统开销：进程的创建与撤销远远大于线程。在创建与撤销进程时，系统要进行分配资源或回收资源，如内存空间、IO设备。在进行进程切换时，涉及到当前执行进程CPU环境及新调度进程CPU环境。</p><p>线程切换时只需要保存和设置少量的寄存器内容，开销较小。</p><p>(4) 通信：进程通信需要借助UPC；线程通信可以直接读写同一进程中的数据来进行通信。</p><p>协程：是用户态的轻量级线程，调度由用户来控制，有自己的寄存器上下文和栈，在调度切换过程中没有内核切换的开销，切换速度非常快。</p><p><strong>从Java的层面来说</strong>：</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/6/202206141104367.png" alt="image-20220614110409178" loading="lazy"></p><p>总结：线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的，而各线程则不一定，因为同一进程中的线程极有可能会相互影响。线程执行开销小，但不利于资源的管理和保护；而进程正相反。</p><h3 id="_2、进程有哪几个状态" tabindex="-1"><a class="header-anchor" href="#_2、进程有哪几个状态" aria-hidden="true">#</a> 2、进程有哪几个状态</h3><blockquote><p>创建、就绪、运行、阻塞与结束</p></blockquote><p>进程大致分为五个状态：</p><ul><li><strong>创建状态(new)</strong> ：进程正在被创建，尚未到就绪状态。</li><li><strong>就绪状态(ready)</strong> ：进程已处于准备运行状态，即进程获得了除了处理器之外的一切所需资源，一旦得到处理器资源(处理器分配的时间片)即可运行。</li><li><strong>运行状态(running)</strong> ：进程正在处理器上上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。</li><li><strong>阻塞状态(waiting)</strong> ：又称为等待状态，进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲，该进程也不能运行。</li><li><strong>结束状态(terminated)</strong> ：进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。</li></ul><h3 id="_3、进程间的通信方式" tabindex="-1"><a class="header-anchor" href="#_3、进程间的通信方式" aria-hidden="true">#</a> 3、进程间的通信方式</h3><blockquote><p>管道(有名、无名)、信号、共享内存</p></blockquote><p><strong>管道/匿名管道(Pipes)</strong>：半双工通信，只能供具有亲缘关系的进程间使用，指的是父子进程。</p><p><strong>有名管道(Names Pipes)</strong> ： 匿名管道由于没有名字，只能用于亲缘关系的进程间通信。为了克服这个缺点，提出了有名管道。有名管道严格遵循<strong>先进先出(first in first out)</strong>。有名管道以磁盘文件的方式存在，可以实现本机任意两个进程通信。</p><p><strong>信号(Signal)</strong>：用于通知接收进程某个事件已经发生。</p><p><strong>消息队列(messagequeue)</strong>：消息的链表，存放在内核中由消息队列标识符标识。解决了信号传递少、管道只能承载无格式字节路以及缓冲区大小受限等缺点。</p><p><strong>共享内存(Shared memory)</strong> ：由一个进程创建的可以供其他进程所访问的内存，主要是为了其他进程间通信运行效率低产生的。配合信号量能够实现进程同步以及通信。</p><p><strong>信号量(semphores)</strong>：计数器，可以控制多个进程对共享资源的访问，常作为锁机制，防止某个进程在访问共享资源时，其他进程也来访问资源。</p><p><strong>套接字(sockets)</strong>：可用于不同机器之间的进程通信。在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元，可以看做是不同主机之间的进程进行双向通信的端点，简单的说就是通信的两方的一种约定，用套接字中的相关函数来完成通信过程。</p><h3 id="_4、线程间的同步方式" tabindex="-1"><a class="header-anchor" href="#_4、线程间的同步方式" aria-hidden="true">#</a> 4、线程间的同步方式</h3><blockquote><p>互斥量（Mutex）、信号量（Semaphore）、事件（wait、notify）</p></blockquote><p>操作系统一般有下面三种线程同步的方式：</p><ol><li><strong>互斥量(Mutex)</strong>：采用互斥对象机制，只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个，所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。</li><li><strong>信号量(Semaphore)</strong> ：它允许同一时刻多个线程访问同一资源，但是需要控制同一时刻访问此资源的最大线程数量。</li><li><strong>事件(Event)</strong> :Wait/Notify：通过通知操作的方式来保持多线程同步，还可以方便的实现多线程优先级的比较操作。</li></ol><h3 id="_5、进程调度算法" tabindex="-1"><a class="header-anchor" href="#_5、进程调度算法" aria-hidden="true">#</a> 5、进程调度算法</h3><blockquote><p>调度过程：保持当前进程处理及现场信息，按照算法来选取进程，接着将cpu分配给进程。</p><p>先来先服务、短作业优先、基于时间片轮转算法、优先级调度</p></blockquote><p>调度过程：①保存当前进程处理及现场信息。②按照算法来选取进程。③把处理器分配给进程。</p><p>算法：</p><p><strong>1、先来先服务(FCFS)</strong>：从就绪队列中选择一个最先进入该队列的进程为之分配资源，使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。</p><p><strong>2、短作业优先(SJF)</strong>：就绪队列中选出一个估计运行时间最短的进程为之分配资源，使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。</p><p><strong>3、基于时间片的轮转调度算法(RR)</strong>：时间片轮转调度是一种最古老，最简单，最公平且使用最广的算法，又称 RR(Round robin)调度。每个进程被分配一个时间段，称作它的时间片，即该进程允许运行的时间。</p><p><strong>4、多级反馈队列调度算法</strong>：兼顾长进程与短进程。前面的几种进程调度的算法都有一定的局限性。如<strong>短进程优先的调度算法，仅照顾了短进程而忽略了长进程</strong> 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业（进程）迅速完成。，因而它是目前<strong>被公认的一种较好的进程调度算法</strong>，<code>UNIX </code>操作系统采取的便是这种调度算法。</p><p><strong>5、优先级调度算法</strong>：为每个流程分配优先级，首先执行具有最高优先级的进程，依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求，时间要求或任何其他资源要求来确定优先级。</p><h3 id="_6、死锁、死锁条件以及解决死锁处理方法" tabindex="-1"><a class="header-anchor" href="#_6、死锁、死锁条件以及解决死锁处理方法" aria-hidden="true">#</a> 6、死锁、死锁条件以及解决死锁处理方法</h3><blockquote><p>什么是死锁？</p></blockquote><p>死锁描述的是这样一种情况：多个进程/线程同时被阻塞，它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞，因此程序不可能正常终止。</p><p>死锁：大家都拿不到对方占用的资源。 活锁：拿到资源但是又相互不释放，在多线程中出现相互谦让，都主动将资源释放给其他线程来进行使用。</p><blockquote><p>死锁的四个条件</p></blockquote><p>死锁条件：引出java并发</p><ul><li>互斥：每个资源都已经分配给一个进程，要么就是可用的。</li><li>占有和等待：已经得到了某个资源的进程可以再请求新的资源。</li><li>不可抢占：已经拿到锁的进程不能被强制性抢占，只能等到它显示释放。</li><li>环路等待：有两个或两个以上进程组成一条环路，环路中每个进程都在等待另一个进程释放它们占有的资源。</li></ul><p>只有四个条件同时成立时，死锁才会出现。</p><blockquote><p>解决死锁方法</p></blockquote><p>处理死锁的方式：</p><p>1、死锁预防：不同进程上锁时顺序一定要注意，顺序不要相反。</p><p>2、死锁避免：运行期间避免死锁。</p><p>3、死锁检测与死锁恢复：可利用抢占恢复，回滚回复或者杀死进程</p><p>引出java解决方案：使用jps来定位进程号，接着使用jstack 进程id来查看堆栈信息若是有死锁就可以看到。</p><p>4、解除：是与检测相配套的一种措施，用于将进程从死锁状态下解脱出来。</p><h3 id="_7、避免死锁" tabindex="-1"><a class="header-anchor" href="#_7、避免死锁" aria-hidden="true">#</a> 7、避免死锁</h3><p>那么如何保证系统保持在安全状态呢？通过算法，其中最具有代表性的 <strong>避免死锁算法</strong> 就是 Dijkstra 的银行家算法，银行家算法用一句话表达就是：当一个进程申请使用资源的时候，<strong>银行家算法</strong> 通过先 <strong>试探</strong> 分配给该进程资源，然后通过 <strong>安全性算法</strong> 判断分配后系统是否处于安全状态，若不安全则试探分配作废，让该进程继续等待，若能够进入到安全的状态，则就 <strong>真的分配资源给该进程</strong>。</p><h3 id="_8、cpu在执行一个线程-什么时候会被切换走" tabindex="-1"><a class="header-anchor" href="#_8、cpu在执行一个线程-什么时候会被切换走" aria-hidden="true">#</a> 8、CPU在执行一个线程，什么时候会被切换走？</h3><blockquote><p><a href="https://blog.csdn.net/Mind_programmonkey/article/details/116722482" target="_blank" rel="noopener noreferrer">【计算机操作系统】-进程切换什么时候会发生呢？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>时间片中断、IO中断、异常中断、虚拟地址异常（缺页）</p><h3 id="_9、一个32位系统-一个进程访问地址空间是多大" tabindex="-1"><a class="header-anchor" href="#_9、一个32位系统-一个进程访问地址空间是多大" aria-hidden="true">#</a> 9、一个32位系统，一个进程访问地址空间是多大？</h3><blockquote><p><a href="https://blog.csdn.net/jiangchao3392/article/details/102475181" target="_blank" rel="noopener noreferrer">32位，64位系统寻址空间及最大内存<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>理论上：32位=2^32B = 4 * 2^30B = 4GB，这是 32 位下单进程内存上限</p><h3 id="_10、操作系统fork进程的具体流程" tabindex="-1"><a class="header-anchor" href="#_10、操作系统fork进程的具体流程" aria-hidden="true">#</a> 10、操作系统fork进程的具体流程</h3><blockquote><p><a href="https://blog.csdn.net/qq_44800871/article/details/106318630?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_default&amp;spm=1001.2101.3001.4242.2&amp;utm_relevant_index=4" target="_blank" rel="noopener noreferrer">关于操作系统fork()函数详解<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>fork()操作系统的一个函数：</p><p>1、fork（）函数通过<strong>系统调用</strong>创建一个与原来进程几乎完全相同的进程，然后把原来的进程的所有值都复制到新的新进程中，只有少数值与原来的进程的值不同。</p><p>2、c程序一开始，就会产生 一个进程，当这个进程执行到fork()的时候，会创建一个子进程。此时父进程和子进程是共存的，它们俩会一起向下执行c程序的代码。</p><p>3、子进程创建成功后，fork是返回两个值，一个代表父进程，一个代表子进程：<strong>代表父进程的值是一串数字，这串数字是子进程的ID（地址）；一个代表子进程，值为0</strong>。而当执行fork （）函数出现错误时，则返回一个负值。</p><p>创建出父子进程之后也会出现并发操作，两个进程之间存在竞争。</p><h3 id="_11、进程有哪些数据段-线程可以使用哪些进程的数据段" tabindex="-1"><a class="header-anchor" href="#_11、进程有哪些数据段-线程可以使用哪些进程的数据段" aria-hidden="true">#</a> 11、进程有哪些数据段？线程可以使用哪些进程的数据段？</h3><blockquote><p><a href="https://blog.csdn.net/koozxcv/article/details/49533731" target="_blank" rel="noopener noreferrer">Linux进程的五个段（数据段、代码段、bss、堆栈段）<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>属于静态内存分配包含：BSS段、数据段</p><p>BSS段（bss segment，Block Started by Symbol）：来存放程序中未初始化的全局变量的一块内存区域。</p><p>数据段（data segment）：存放程序中已初始化的全局变量的一块内存区。</p><p>代码段（code segment/text segment）：存放程序执行代码的一块内存区域。</p><p>堆（heap）：存放进程运行中被动态分配的内存段，它的大小并不固定，可动态扩张或缩减。</p><ul><li>当进程调用malloc等函数分配内存时，新分配的内存就被动态添加到堆上（堆被扩张）；当利用free等函数释放内存时，被释放的内存从堆中被剔除（堆被缩减）</li></ul><p>栈(stack)：用户存放程序临时创建的局部变量。</p><p><strong>线程应该能使用</strong>：堆。</p><h2 id="文件管理" tabindex="-1"><a class="header-anchor" href="#文件管理" aria-hidden="true">#</a> 文件管理</h2><h3 id="_1、父进程的文件描述符和子进程共享吗" tabindex="-1"><a class="header-anchor" href="#_1、父进程的文件描述符和子进程共享吗" aria-hidden="true">#</a> 1、父进程的文件描述符和子进程共享吗</h3><blockquote><p><a href="https://blog.csdn.net/ShenHang_/article/details/106838527" target="_blank" rel="noopener noreferrer">linux 对父子进程共享文件描述符的理解<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>文件描述符是由无符号整数表示的句柄，进程使用它来标识打开的文件。</p><ul><li>文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联，这些信息被称作文件的上下文</li></ul><p>情况1：父进程先打开了一个文件，之后进行fork()</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204212120154.png" alt="image-20220421212029107" loading="lazy"></p><p>此时子进程会继承父进程的环境和上下文中的大部分内容，包括文件描述符。此时父子进程享有相同的文件偏移量。</p><ul><li>如果一个进程打开了一个文件以后，创建子进程，子进程会继承父进程的文件描述符。此时父子进程享有相同的文件偏移量。</li></ul><p>情况2：父进程先进行fock创建子进程，那么此时子进程不会有这个文件描述符。</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204212120582.png" alt="image-20220421212054521" loading="lazy"></p><p>虽然两个文件描述符都是对同一个文件进行操作，但是由于父子进程的文件描述符是不一样的，此时父子进程不享有相同的文件偏移量，各自的文件偏移量互不影响。</p><h3 id="_2、文件描述符具体是什么东西-从task-struct和linux的文件索引两方面讲的" tabindex="-1"><a class="header-anchor" href="#_2、文件描述符具体是什么东西-从task-struct和linux的文件索引两方面讲的" aria-hidden="true">#</a> 2、文件描述符具体是什么东西：从task_struct和linux的文件索引两方面讲的</h3><blockquote><p><a href="https://os.51cto.com/article/663060.html" target="_blank" rel="noopener noreferrer">Linux 文件描述符 fd 究竟是什么？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>当打开一个文件时，内核向进程返回一个文件描述符（ open 系统调用得到 ），后续 read、write 这个文件时，则只需要用这个文件描述符来标识该文件，将其作为参数传入 read、write 。</p><p>进程的抽象是基于 struct task_struct 结构体：</p><div class="language-c ext-c line-numbers-mode"><pre class="language-c"><code><span class="token keyword">struct</span> <span class="token class-name">task_struct</span> <span class="token punctuation">{</span>
	<span class="token comment">// 进程状态</span>
	<span class="token keyword">long</span>			  state<span class="token punctuation">;</span>
	<span class="token comment">// 虚拟内存结构体</span>
	<span class="token keyword">struct</span> <span class="token class-name">mm_struct</span>  <span class="token operator">*</span>mm<span class="token punctuation">;</span>
	<span class="token comment">// 进程号</span>
	<span class="token class-name">pid_t</span>			  pid<span class="token punctuation">;</span>
	<span class="token comment">// 指向父进程的指针</span>
	<span class="token keyword">struct</span> <span class="token class-name">task_struct</span> __rcu  <span class="token operator">*</span>parent<span class="token punctuation">;</span>
	<span class="token comment">// 子进程列表</span>
	<span class="token keyword">struct</span> <span class="token class-name">list_head</span>		children<span class="token punctuation">;</span>
	<span class="token comment">// 存放文件系统信息的指针</span>
	<span class="token keyword">struct</span> <span class="token class-name">fs_struct</span>		<span class="token operator">*</span>fs<span class="token punctuation">;</span>
	<span class="token comment">// 一个数组，包含该进程打开的文件指针</span>
	<span class="token keyword">struct</span> <span class="token class-name">files_struct</span>		<span class="token operator">*</span>files<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>files 是一个指针，指向一个为 struct files_struct 的结构体。这个结构体就是用来管理该进程打开的所有文件的管理结构。</p><p>struct task_struct 是进程的抽象封装，标识一个进程，在 Linux 里面的进程各种抽象视角，都是这个结构体给到你的。当创建一个进程，其实也就是 new 一个 struct task_struct 出来。</p><p>其中的files就是一个文件数组：</p><div class="language-c ext-c line-numbers-mode"><pre class="language-c"><code><span class="token comment">/*  
 * Open file table structure  
 */</span>  
<span class="token keyword">struct</span> <span class="token class-name">files_struct</span> <span class="token punctuation">{</span>  
    <span class="token comment">// 读相关字段  </span>
    <span class="token class-name">atomic_t</span> count<span class="token punctuation">;</span>  
    bool resize_in_progress<span class="token punctuation">;</span>  
    <span class="token class-name">wait_queue_head_t</span> resize_wait<span class="token punctuation">;</span>  
    <span class="token comment">// 打开的文件管理结构  </span>
    <span class="token keyword">struct</span> <span class="token class-name">fdtable</span> __rcu <span class="token operator">*</span>fdt<span class="token punctuation">;</span>  
    <span class="token keyword">struct</span> <span class="token class-name">fdtable</span> fdtab<span class="token punctuation">;</span>  
    <span class="token comment">// 写相关字段  </span>
    <span class="token keyword">unsigned</span> <span class="token keyword">int</span> next_fd<span class="token punctuation">;</span>  
    <span class="token keyword">unsigned</span> <span class="token keyword">long</span> close_on_exec_init<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  
    <span class="token keyword">unsigned</span> <span class="token keyword">long</span> open_fds_init<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  
    <span class="token keyword">unsigned</span> <span class="token keyword">long</span> full_fds_bits_init<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>  
    <span class="token keyword">struct</span> <span class="token class-name">file</span> <span class="token operator">*</span> fd_array<span class="token punctuation">[</span>NR_OPEN_DEFAULT<span class="token punctuation">]</span><span class="token punctuation">;</span>  
<span class="token punctuation">}</span><span class="token punctuation">;</span> 
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204212311539.png" alt="image-20220421231143477" loading="lazy"></p><p>fd 就是这个数组的索引，也就是数组的槽位编号而已。 通过非负数 fd 就能拿到对应的 struct file 结构体的地址</p><ul><li>fd 真的就是 files 这个字段指向的指针数组的索引而已（仅此而已）。通过 fd 能够找到对应文件的 struct file 结构体。</li></ul><p>那么有了整个句柄索引，我们就可以通过整个fd来找到对应的file文件对象了，然后进行一些操作。</p><p>系统架构图：</p><p><img src="https://pictured-bed.oss-cn-beijing.aliyuncs.com/img/2022/3/202204212318871.png" alt="image-20220421231800766" loading="lazy"></p><h3 id="_3、linux打开文件和windows打开文件有什么不同" tabindex="-1"><a class="header-anchor" href="#_3、linux打开文件和windows打开文件有什么不同" aria-hidden="true">#</a> 3、Linux打开文件和windows打开文件有什么不同</h3><blockquote><p><a href="https://blog.51cto.com/u_15077561/3727777" target="_blank" rel="noopener noreferrer">【Linux应用】打开文件<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>linux主要是ext系列，windows主要用fat系列和ntfs</p><p>Windows的目录结构属于分区；Linux分区 &#39;加载&#39; 于目录结构</p><p>权限：windows用户分为两类：admin和limited；linux用户分为四类，超级管理员（也就是root权限），普通用户，同组用户，其他用户。</p><p>Linux打开文件方式：</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>1）系统找到这个文件名所对应的inode编号。
2）通过inode编号从inode_table中找到对应的inode结构体。
3）根据inode结构体中记录的信息，确定文件信息所在的block，并读出数据。
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="io管理" tabindex="-1"><a class="header-anchor" href="#io管理" aria-hidden="true">#</a> IO管理</h2><h3 id="_1、网络请求的处理过程" tabindex="-1"><a class="header-anchor" href="#_1、网络请求的处理过程" aria-hidden="true">#</a> 1、网络请求的处理过程</h3><p>client发送网络请求-&gt;网卡-&gt;复制到网卡缓冲区(内核)-&gt;复用到用户空间也就是web服务器，之后进行处理依次往复返回即可。</p><h3 id="_2、io模型" tabindex="-1"><a class="header-anchor" href="#_2、io模型" aria-hidden="true">#</a> 2、IO模型</h3><p>阻塞式IO：应用程序阻塞，直到数据从内核缓冲区复制到应用进程缓冲区中才返回。</p><p>非阻塞式IO：应用程序不断的去执行系统调用来获取IO是否完成，轮询操作。</p><p>IO复用：linux中如select、poll、epoll，单个进程拥有处理多个IO事件能力。</p><p>信号驱动式：内核在数据达到时发送SIGIO信号。</p><p>异步I/O：内核在完成所有操作后向应用进程发送信号。</p><ul><li>Linux2.6引进，目前AIO并不完善，在linux下实现高并发网络编程目前一般都是使用IO复用方式。</li></ul><p>前面四种都是同步IO，最后一个是异步IO。也仅仅只有异步能够让内核完成整个操作，并且将数据从内核中拷贝到应用程序的缓冲区，所有事情完成之后才通知应用程序。</p><h3 id="_3、io复用技术" tabindex="-1"><a class="header-anchor" href="#_3、io复用技术" aria-hidden="true">#</a> 3、IO复用技术</h3><p>IO多路复用：多个描述符的IO操作都能够在一个线程内并发交替地顺序完成。这里的复用指的是复用一个进程或线程。</p><p>（1）select：有三种类型描述符类型，分别对应读、写、异常条件描述。底层是数组。</p><p>（2）poll：底层采用链表实现。</p><p>两者区别：</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>1、都是采用轮询实现。
2、描述符数据结构定义，select是用三个事件类型，一个数组；poll则是一个链表，每个节点都含有描述和事件定义。
3、select由于是使用数组实现的，大小默认位1024，也就是默认只能监听1024个描述符；poll对于描述符数量没有限制，并且提供了更多的事件类型，对于描述符的重复利用比select高。
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>（3）epoll：其中poll_ctl()用于向<strong>内核注册</strong>新的描述符或者是改变某个文件描述符状态，已经注册的描述符在内核中会被维护在一颗<strong>红黑树</strong>上，通过回调函数内核会将I/O准备好的描述符加入到一个<strong>链表</strong>当中管理，进程调用epoll_wait()便可以<strong>得到事件完成的描述符</strong>。</p><p>工作模式：</p><p>1、LT(电平触发)：当epoll_wait()检测到描述符事件到达后，将此事件通知进程，进程可以不进行处理，下次调用epoll_wait会再次通知进程。</p><p>2、ET(边沿触发)：通知之后进程必须立即处理事件，减少了同一事件的触发次数，效率更高。</p><p>epoll相对于select和poll，epoll最大优势就是采用回调的方式来进行检测就绪实现，不需要遍历，事件复杂度位O(1)。</p><h2 id="内存管理" tabindex="-1"><a class="header-anchor" href="#内存管理" aria-hidden="true">#</a> 内存管理</h2><h3 id="_1、内存管理介绍" tabindex="-1"><a class="header-anchor" href="#_1、内存管理介绍" aria-hidden="true">#</a> 1、内存管理介绍</h3><p>操作系统的内存管理主要负责内存的分配与回收（malloc 函数：申请内存，free 函数：释放内存），另外地址转换也就是将逻辑地址转</p><p>换成相应的物理地址等功能也是操作系统内存管理做的事情。</p><h3 id="_2、常见的内存管理机制" tabindex="-1"><a class="header-anchor" href="#_2、常见的内存管理机制" aria-hidden="true">#</a> 2、常见的内存管理机制</h3><p>简单分为<strong>连续分配管理方式</strong>和<strong>非连续分配管理方式</strong>这两种。连续分配管理方式是指为一个用户程序分配一个连续的内存空间，常见的如 <strong>块式管理</strong> 。同样地，非连续分配管理方式允许一个程序使用的内存分布在离散或者说不相邻的内存中，常见的如<strong>页式管理</strong> 和 <strong>段式管理</strong>。</p><ol><li><strong>块式管理</strong> ： 远古时代的计算机操作系统的内存管理方式。将内存分为几个固定大小的块，每个块中只包含一个进程。如果程序运行需要内存的话，操作系统就分配给它一块，如果程序运行只需要很小的空间的话，分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间，我们称之为碎片。</li><li><strong>页式管理</strong> ：把主存分为大小相等且固定的一页一页的形式，页较小，相比于块式管理的划分粒度更小，提高了内存利用率，减少了碎片。页式管理通过页表对应逻辑地址和物理地址。</li><li><strong>段式管理</strong> ： 页式管理虽然提高了内存利用率，但是页式管理其中的页并无任何实际意义。 段式管理把主存分为一段段的，段是有实际意义的，每个段定义了一组逻辑信息，例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。</li><li>段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段，每个段又分成若干页，也就是说 <strong>段页式管理机制</strong> 中段与段之间以及段的内部的都是离散的</li></ol><h3 id="_3、快表和多级页表" tabindex="-1"><a class="header-anchor" href="#_3、快表和多级页表" aria-hidden="true">#</a> 3、快表和多级页表</h3><blockquote><p>快表</p></blockquote><p>为了提高虚拟地址到物理地址的转换速度，操作系统在 <strong>页表方案</strong> 基础之上引入了 <strong>快表</strong> 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器（Cache），其中的内容是页表的一部分或者全部内容。作为页表的 Cache，它的作用与页表相似，但是提高了访问速率。由于采用页表做地址转换，读写内存数据时 CPU 要访问两次主存。有了快表，有时只要访问一次高速缓冲存储器，一次主存，这样可加速查找并提高指令执行速度。</p><p>使用快表之后的地址转换流程是这样的：</p><ol><li>根据虚拟地址中的页号查快表；</li><li>如果该页在快表中，直接从快表中读取相应的物理地址；</li><li>如果该页不在快表中，就访问内存中的页表，再从页表中得到物理地址，同时将页表中的该映射表项添加到快表中；</li><li>当快表填满后，又要登记新页时，就按照一定的淘汰策略淘汰掉快表中的一个页。</li></ol><p>看完了之后你会发现快表和我们平时经常在我们开发的系统使用的缓存（比如 Redis）很像，的确是这样的，操作系统中的很多思想、很多经典的算法，你都可以在我们日常开发使用的各种工具或者框架中找到它们的影子。</p><blockquote><p>多级页表</p></blockquote><p>引入多级页表的主要目的是为了<strong>避免把全部页表一直放在内存中占用过多空间</strong>，特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景.</p><p><strong>总结</strong>：为了提高内存的空间性能，提出了多级页表的概念；但是提到空间性能是以浪费时间性能为基础的，因此为了补充损失的时间性能，提出了快表（即 TLB）的概念。 不论是快表还是多级页表实际上都利用到了程序的局部性原理，局部性原理在后面的虚拟内存这部分会介绍到。</p><h3 id="_4、分页机制与分段机制的共同点" tabindex="-1"><a class="header-anchor" href="#_4、分页机制与分段机制的共同点" aria-hidden="true">#</a> 4、分页机制与分段机制的共同点</h3><p>共同点 ：</p><ul><li><p>分页机制和分段机制都是为了提高内存利用率，减少内存碎片。</p></li><li><p>页和段都是离散存储的，所以两者都是离散分配内存的方式。但是，每个页和段中的内存是连续的。</p></li></ul><p>区别 ：</p><ul><li>页的大小是固定的，由操作系统决定；而段的大小不固定，取决于我们当前运行的程序。</li><li>分页仅仅是为了满足操作系统内存管理的需求，而段是逻辑信息的单位，在程序中可以体现为代码段，数据段，能够更好满足用户的需要</li></ul><h3 id="_1、操作系统用户态与内核态的切换" tabindex="-1"><a class="header-anchor" href="#_1、操作系统用户态与内核态的切换" aria-hidden="true">#</a> 1、操作系统用户态与内核态的切换</h3><blockquote><p><a href="https://www.cnblogs.com/gtarcoder/articles/5278074.html" target="_blank" rel="noopener noreferrer">操作系统用户态和内核态之间的切换过程<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>用户态切换到内核态的3种方式：</p><ol><li><p>系统调用：用户态进程主动要求切换到内核态的一种方式，<strong>用户态进程通过系统调用申请使用操作系统</strong>提供的服务程序完成工作。</p></li><li><p>异常：当CPU在<strong>执行运行在用户态下的程序时，发生了某些事先不可知的异常</strong>，这时会触发由当前运行进程切换到处理此异常的内核</p><p>相关程序中，也就转到了内核态，比如缺页异常。</p></li><li><p>外围设备的中断：<strong>外围设备完成用户请求的操作后，会向CPU发出相应的中断信号</strong>，这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序，如果先前执行的指令是用户态下的程序，那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成，系统会切换到硬盘读写的中断处理程序中执行后续操作等。</p></li></ol><hr><h3 id="_2、虚存是什么-请页与交换-虚拟内存-系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存-一个连续完整的地址空间-而实际上-它通常是被分隔成多个物理内存碎片-还有部分暂时存储在外部磁盘存储器上-在需要时进行数据交换。" tabindex="-1"><a class="header-anchor" href="#_2、虚存是什么-请页与交换-虚拟内存-系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存-一个连续完整的地址空间-而实际上-它通常是被分隔成多个物理内存碎片-还有部分暂时存储在外部磁盘存储器上-在需要时进行数据交换。" aria-hidden="true">#</a> 2、虚存是什么？请页与交换？虚拟内存：系统内存管理的一种技术。应用程序认为它拥有连续的可用的内存（一个连续完整的地址空间），而实际上，它通常是被分隔成多个物理内存碎片，还有部分暂时存储在外部磁盘存储器上，在需要时进行数据交换。</h3><ul><li>定义：<strong>定义了一个连续的虚拟地址空间</strong>，并且 <strong>把内存扩展到硬盘空间</strong>。</li></ul><p>Linux采用虚拟内存技术：操作系统将内存抽象成虚拟的地址空间，每个程序都拥有自己的地址空间，这个地址空间被分割为多块，每一块为一个<code>页</code>，这些页映射到物理内存（<code>页框</code>），此时就需要把页码和存放该页的页框填入到一个<code>页表</code>当中，其中页表的表项中设置一些访问控制字段，来表明页面中内存允许何种操作，而从禁止非法访问。</p><p><code>内存管理单元MMU</code>：管理者虚拟内存的地址与物理内存的转换，其中页表存储着页(程序地址空间)和页框(物理内存空间)的映射表。</p><blockquote><p>swap</p></blockquote><p>linux中有swap分区，在分配物理内存时，若是可用内存不足，就会将暂时不用的内存数据先放到磁盘上，其他有用的内存给进程使用，等进程又需要刚开始不用的内存时就再将这些数据加载到内存当中去。</p><p>好处：能够让进程拥有更多的内存地址。</p><blockquote><p>请页与交换</p></blockquote><p><strong>请页</strong>：若处理器访问一个虚拟内存页面时，首先会到页表中去查询该页是否有映射到物理内存框中。</p><ul><li>若是在就使用MMU将页码转换成页框码。</li><li>若是不在就会通知操作系统，发送了页面访问错误(页面错误)，此时就会启动所谓的【请页】机制，调用相应的系统操作函数，判断该虚拟地址是否为有效地址。 <ul><li>若是有效地址：就从虚拟内存中将该地址指向的页面读入到内存中的一个空闲页框中，并且在页表上添加上相应的表项，最终处理器将会从发生页面错误的地方重新开始运行。</li><li>若是无效地址，表明此时进程正在访问一个不存在的虚拟地址，此时操作系统就会终止此次访问。</li></ul></li></ul><p>流程：页表查看是否有无映射，无就进行请页，调用操作函数去访问若是有就将该页读完到空闲页框中(物理内存)，在页表添加表项，最终处理器从页面错误处开始重新运行。</p><p><strong>交换</strong>：若是请页成功，出现没有空闲物理页框情况，就会启动所谓的【交换】机制，也就是调用内核操作函数在物理页框中找不再使用或者近期不使用的页面所占据的页框，找到之后就将其进行移出来装载新的页面。</p><ul><li>若是该页未被修改过，就会删除掉它。</li><li>若是曾被修改过(脏页)，那么就会将该页写回到磁盘上去。</li></ul><h3 id="_3、页面置换算法-请页过程中无空间情况" tabindex="-1"><a class="header-anchor" href="#_3、页面置换算法-请页过程中无空间情况" aria-hidden="true">#</a> 3、页面置换算法（请页过程中无空间情况）</h3><blockquote><p><a href="https://zhuanlan.zhihu.com/p/196478796" target="_blank" rel="noopener noreferrer">clock页面置换算法<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://wenku.baidu.com/view/25e8bfaf6629647d27284b73f242336c1fb93059.html" target="_blank" rel="noopener noreferrer">最佳置换算法（OPT）、先进先出置换算法（FIFO）、最近最久未使用（LRU）算法<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&amp;tid=68155&amp;replytype=1" target="_blank" rel="noopener noreferrer">内存中的页面置换算法——页面缓冲算法(Page Buffering Algorithm,PBA)<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p><p><a href="https://blog.csdn.net/godloveleo9527/article/details/122401553" target="_blank" rel="noopener noreferrer">最不经常使用LFU（least frequently used）算法java实现<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p><strong>置换算法</strong>：与缓存淘汰策略类似，可以将内存看作是磁盘的缓存，在缓存系统中，缓存的大小有限，当有新的缓存到达时，需要淘汰一部分已经存在的缓存，这样才有空间存放新的混啊寻数据。</p><p><strong>算法如下有</strong>：</p><p>最佳置换算法：从主存中移除永远不需要的页面。</p><ul><li>若是不存在，选择最长时间不需要访问的页面，选择的淘汰页面将是以后永不使用的，或者是最长时间内永不访问的页面，此时就保证最低的缺页率。</li></ul><p>先进先出FIFO：选择驻留主存时间最长的页面。内存中最老的页面会被新的网页直接覆盖掉，而不是老的页面出队后再替换。</p><p><strong>近期最久未用算法LRU</strong>：也就是将最久未使用的内存来进行替换。</p><p>CLOCK置换算法：又称为最近未用算法。一个页面首次装入内存时，引用位被置为1，需要替换页面时，替换引用位为0的页面。如果引用位全部为1，则全部清0。</p><p>页面缓冲算法：显著降低了页面换进、换出的频率，是磁盘I/O的操作次数大为减少，因而页面换进、换出的开销。内存中设置的两个链表。</p><ul><li>空闲页面链表：一个空闲物理块链表，是系统长我的空闲物理块，用于分配给频繁发生缺页的进程，以降低该进程的缺页率。</li><li>修改页面链表：由修改的页面所形成的链表</li></ul><p><strong>最不经常使用LFU</strong>：会将内存中最不经常使用的数据给淘汰掉，是LRU的一种变种算法。</p><ul><li>要求在页置换时置换引用计数最小的页，因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多，但以后就不再使用，这类页将会长时间留在内存中，因此可以将引用计数寄存器定时右移一位，形成指数衰减的平均使用次数。</li></ul><p><strong>缓存淘汰算法(LRU)实现</strong>：需要在内存中维护一个所有页面的链表，当一个页面被访问时，将这个页面移动到链表表头，这样就能保证链表表尾的页面是最近最久未访问的。</p><h3 id="_4、缺页中断异常" tabindex="-1"><a class="header-anchor" href="#_4、缺页中断异常" aria-hidden="true">#</a> 4、缺页中断异常</h3><blockquote><p><a href="https://blog.csdn.net/m0_37962600/article/details/81448553" target="_blank" rel="noopener noreferrer">详解缺页中断-----缺页中断处理（内核、用户）<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>在执行一条指令时，如果发现他要访问的页没有在内存中（即存在位为0），那么停止该指令的执行，并产生一个页不存在的异常，对应的故障处理程序可通过从外存加载该页的方法来排除故障，之后，原先引起的异常的指令就可以继续执行，而不再产生异常。</p><h3 id="_5、如何提升虚拟和物理地址映射速度" tabindex="-1"><a class="header-anchor" href="#_5、如何提升虚拟和物理地址映射速度" aria-hidden="true">#</a> 5、如何提升虚拟和物理地址映射速度？</h3><p>使用快表：系统一旦访问某个页，那么系统会再一段时间内稳定工作在这个页中，所以为了提高访问页表的速度，系统配备了一组能够<strong>容纳一个页表的硬件寄存器</strong>。这样的话系统再访问虚拟内存时，首先会到这组硬件寄存器当中去访问，此时系统速度就会快很多，这组存放在当前页表的寄存器叫做快表。</p><h3 id="_6、分页与分段的比较" tabindex="-1"><a class="header-anchor" href="#_6、分页与分段的比较" aria-hidden="true">#</a> 6、分页与分段的比较</h3><p>从几个地方来考虑：</p><p>1、对程序员透明性：分页透明；分段需要程序员显示划分每个段。</p><p>2、地址空间的维度：分页是一维地址空间；分段是二维的，程序员在标识一个地址时，既需要给出段名，又需要给出段内的地址。</p><p>3、大小是否可改变：分页大小不可变；分段的大小可以动态改变。</p><p>4、出现原因：分页主要用于实现虚拟内存，从而获得更大地址空间；分段主要是为了使<strong>程序和数据划分为逻辑上独立的地址空间</strong>有助于共享和保护。</p><h2 id="设备管理" tabindex="-1"><a class="header-anchor" href="#设备管理" aria-hidden="true">#</a> 设备管理</h2><h3 id="_1、中断内会发生什么-中断知道吗" tabindex="-1"><a class="header-anchor" href="#_1、中断内会发生什么-中断知道吗" aria-hidden="true">#</a> 1、中断内会发生什么，中断知道吗？</h3><blockquote><p><a href="https://blog.csdn.net/punk_lover/article/details/38189701?spm=1001.2101.3001.6661.1&amp;utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&amp;utm_relevant_index=1" target="_blank" rel="noopener noreferrer">什么是中断？中断前后cpu在做那些操作？<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span></a></p></blockquote><p>当中断发生时，硬件机构自动地进入响应中断过程，由操作系统的中断处理程序对中断事件进行处理。</p><p>具体过程：</p><p>1、保存现场：将当前中断的异常信息进行保存。</p><p>2、分析原因，转中断程序：根据不同的异常信息来使用不同的异常处理函数来进行处理。</p><p>3、恢复现场：中断处理结束后软件会退出中断，若是高级中断会返回到低级中断，接着来恢复一些进行继续程序的执行。</p></div><!----><footer class="page-meta"><div class="meta-item edit-link"><a href="https://gitee.com/changluJava/personal-reading/edit/main/demo/src/zh/interview/操作系统.md" rel="noopener noreferrer" target="_blank" aria-label="编辑此页" class="nav-link label"><!--[--><svg xmlns="http://www.w3.org/2000/svg" class="icon edit-icon" viewbox="0 0 1024 1024" fill="currentColor" aria-label="edit icon"><path d="M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"></path><path d="M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"></path></svg><!--]-->编辑此页<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">open in new window</span></span><!----></a></div><!----><!----></footer><nav class="page-nav"><a href="/zh/interview/%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%8E%E9%AB%98%E6%80%A7%E8%83%BD%E9%AB%98%E5%8F%AF%E7%94%A8.html" class="nav-link prev" aria-label="分布式"><div class="hint"><span class="arrow left"></span>上一页</div><div class="link"><span class="icon iconfont icon-lock" style=""></span>分布式</div></a><a href="/zh/interview/%E6%99%BA%E5%8A%9B%E9%A2%98.html" class="nav-link next" aria-label="智力题"><div class="hint">下一页<span class="arrow right"></span></div><div class="link">智力题<span class="icon iconfont icon-lock" style=""></span></div></a></nav><div class="giscus-wrapper input-top" style="display:block;"><div style="text-align:center">Loading...</div></div><!----><!--]--></main><!--]--><footer class="footer-wrapper"><div class="footer">默认页脚</div><div class="copyright">Copyright © 2022 长路</div></footer><!--]--></div><!--]--><!----><!--]--></div>
    <script type="module" src="/assets/app.e732cc94.js" defer></script>
  </body>
</html>
